ODBC関数のCURDATEはサポートされていません。
システム・コールを使用して、この関数と同様の機能をアプリケーションで実現できます。次に例を示します。
/* Function curdate returns current date in YYYY-MM-DD string format */ /* datebuf is assumed to point to a buffer of at least 11 bytes*/ char * curdate(char *datebuf) { struct tm *timestamp; time_t curtimestamp = time((time_t*)0); timestamp = localtime_r(&curtimestamp);
sprintf(datebuf, "%04d-%02d-%02d", timestamp->tm_year+1900, timestamp->tm_mon+1, timestamp->tm_mday); return datebuf; }CURDATEはサポートされていませんが、ODBCの現在の日時のスカラー関数であるNOWはサポートされています。NOWから戻されるTIMESTAMP値を変換してTO_DATEに渡すことによってCURDATEと同様の処理を実現するだけでなく、ODBCプログラム内でNOW関数をコールできます。
TimesTenのTO_DATEでは、DATE型ではなくTIMESTAMP型を戻します。
NOW関数をコールするには、次のような構文を使用します。
--(*vendor(Microsoft),product(ODBC) FN NOW() *)--または、次の構文を使用することもできます。
{FN NOW()}ODBC SQLGetInfo関数をコールすることによって、NOWがサポートされていることをアプリケーションで確認できます。次に例を示します。
rc = SQLGetInfo(hdbc, SQL_TIMEDATE_FUNCTIONS, (PTR)&fFuncs, sizeof(fFuncs), NULL); if (fFuncs & SQL_FN_TD_NOW) printf("NOW function is supported.\n"); else printf("NOW function is not supported.\n");